First-in, First-out (FIFO) memories are commonly used to transfer data between different digital systems with independent clocking sources. FIFOs generally fall into one of two main categories: those in which data loaded into the inputs has to ripple through the entire memory before appearing at the outputs, and those in which data has only to propagate through the memory currently being read before appearing at the outputs. The latter are commonly called "zero fall-through time" FIFOs.
Virtually all conventional FIFOs contain some logic to determine if the FIFO is full. This condition may be indicated by calculating the number of words written into the memory that is in excess of the number of words read out from the memory. Logic is also usually provided to determine whether the memory is empty, corresponding to the condition wherein the number of words that have been read out equals the number of words that have been written into the memory. Many of the these FIFOs also contain logic to indicate other degrees of use of the FIFO capacity, such as half-full, almost-full, and almost-empty conditions. The data word capacity of these FIFOs is conventionally fixed, as is the number of words indicated by the full, empty, etc. status flags.
Recently, however, a need has arisen for a FIFO whose word capacity can be used or defined as any number of words from one up to some maximum number. For instance, it may be desirable to define a memory capacity of 17 words or some other number specified by a particular application. It has further become desirable that such a FIFO continue to have status flags that indicate whether the memory is empty, full, or filled to some intermediate capacity.